
# TODO: 导入必要的库和模块
from PIL import Image
import numpy as np
import gradio as gr
import joblib
from pinecone import Pinecone, ServerlessSpec
# Pinecone 配置
pinecone = Pinecone(api_key="53a3c2d7-0de5-43d6-8ec5-5b7352974c34",environment='us-east-1-gcp')


# 连接到 Pinecone 索引
index_name = "mnist-index"
index = pinecone.Index(index_name)
def predict_digit(img):
    if isinstance(img, np.ndarray):
        img = Image.fromarray(img)  # 将 numpy 数组转换为 PIL 图像对象
    img = img.convert('L')  # 转为灰度图
    img = img.resize((8, 8))  # 调整图像大小为 8x8
    img_array = np.array(img)  # 转换为 numpy 数组
    img_array = img_array.astype(int).flatten()  # 使用内置的 int 类型并展平数组
    
 # 查询 Pinecone 索引
    query_response = index.query(vector=img_array.tolist(), top_k=1, include_metadata=True)
    prediction = query_response['matches'][0]['metadata']['label']
    
    return int(prediction)  # 将 numpy.int32 转换为内置的 int 类型y.int32 转换为内置的 int 类型

# 创建Gradio接口
iface = gr.Interface(
    fn=predict_digit,
    inputs=gr.Image(shape=(200, 200), image_mode='L', invert_colors=True, source="canvas"),
    outputs="label",
    title="手写数字识别",
    description="请在下面的画板上写一个数字，然后点击提交查看模型预测结果。"
)

# 启动Gradio接口
iface.launch()